package com.atguigu.gulimall.seckill.scheduled;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;



/**
 * @program: gulimall
 * @description: @Scheduled它不是整合cron ,如果要整合cron 需要自己引入
 * @author: YuWenYi
 * @create: 2021-07-23 15:59
 **/

//定时任务
//1、@EnableScheduling开启定时任务
//2、@scheduled开启一个定时任务
//3、自动配置类TaskSchedulingAutoConfiguration
//异步任务
//1、@EnableAsync开启异步任务功能
//2、@Async给希望异步执行的方法上标注
//3、自动配置类TaskExecutionAutoConfiguration属性绑定在TaskExecutionProperties


@Slf4j
// 开启异步任务
//@EnableAsync
//@EnableScheduling
//@Component
public class HelloSchedule {
    /*
        在Spring中 只允许6位 [* * * ? * 1] : 每周一每秒执行一次
         [* /5 * * ? * 1] : 每周一 每5秒执行一次
        1、Spring中6位组成,不允许第7位的年
        2、在周几的位置，1-7代表周一到周日;MON-SUN3、
        3.定时任务不应孩阻塞。默认是阻塞的
        有如下方法可以让定时任务异步执行:
            1) 、可以让业务运行以异步的方式,自己提交到线程池
                CompletableFuture.runAsync(()->{
                    XXXxService.hello();
                }, executor) ;

            2)、支持定时任务线程池;设置TaskSchedulingProperties;
                spring.task.scheduling.pool.size=5

            3) 、让定时任务异步执行
                异步任务;

        解决:使用异步+定时任务来完成定时任务不阻塞的功能;

    * */

    @Async
    @Scheduled(cron = "*/5 * * ? * 1")
    public void hello(){
        log.info("i love you...");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) { }
    }
}